/**
 * 
 */
package projeto.modelo.repositorio;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
//import java.util.Date;
import projeto.conexao.GerenciadorConexao;
import projeto.conexao.IGerenciadorConexao;
import projeto.erro.ConexaoException;
import projeto.erro.RepositorioException;
import projeto.modelo.to.NotaFiscal;

/**
 * @author Thiago Evoa
 *
 */
public class RepositorioNotaFiscal implements IRepositorioNotaFiscal{
	private IGerenciadorConexao g;
	
	public RepositorioNotaFiscal(){
		g = GerenciadorConexao.getInstancia();
	}

	public void salvar ( NotaFiscal nf ) throws ConexaoException, RepositorioException{
		
		Connection c = g.conectar();
		String sqlSalvar = "INSERT INTO NotasFiscal(notasfiscal_Numero,clientes_Codigo,funcionarios_Codigo,formasPagamento_Codigo,notasFiscal_ValorNotaFiscal,notasFiscal_DataEmissao,notasFiscal_Status) VALUES(?,?,?,?)";
		
		try{
			PreparedStatement pstm = c.prepareStatement ( sqlSalvar );
			pstm.setInt ( 1, nf.getNotasFiscal_Numero() );
			pstm.setInt ( 2, nf.getClientes_Codigo() );
			pstm.setInt ( 3, nf.getFuncionarios_Codigo() );
			pstm.setInt ( 4, nf.getFormasPagamento_Codigo() );
			pstm.setDouble ( 5, nf.getNotasFiscal_ValorNotaFiscal() );
			pstm.setDate ( 6, (java.sql.Date) nf.getNotasFiscal_DataEmissao() );
			pstm.setBoolean ( 7, nf.getNotasFiscal_Status() );
			pstm.executeUpdate(); 
			pstm.close();
		}catch ( SQLException ex ){
			throw new RepositorioException ( ex.getMessage() );
		}finally{
			g.desconectar ( c );
		}
	}
	
	public void cancelar ( int notasFiscal_Numero ) throws ConexaoException, RepositorioException{
		
		Connection c = g.conectar();
		String sqlCancelar = "DELETE FROM NotasFiscal WHERE (notasFiscal_Numero = ?)";
		
		try{
			
			java.sql.PreparedStatement pstm = c.prepareStatement ( sqlCancelar );
			pstm.setInt ( 1, notasFiscal_Numero );
			pstm.executeUpdate();
			pstm.close();
		}catch ( SQLException ex ){
			
			throw new RepositorioException ( ex.getMessage() );
			
		}finally{
			
			g.desconectar ( c );
			
		}
	}
	
	public NotaFiscal consultar ( int notasFiscal_Numero) throws ConexaoException, RepositorioException{
		NotaFiscal nf = null;
		Connection c = g.conectar();
		String sqlConsulta = "SELECT nf.notasfiscal_Numero,nf.clientes_Codigo,nf.funcionarios_Codigo,nf.formasPagamento_Codigo,nf.notasFiscal_ValorNotaFiscal,nf.notasFiscal_DataEmissao,nf.notasFiscal_Status FROM NotasFiscal AS us WHERE (nf.notasFiscal_Numero = ? )";
		
		try{
			
			PreparedStatement pstm = c.prepareStatement ( sqlConsulta );
			pstm.setInt( 1, notasFiscal_Numero);
			ResultSet rs = pstm.executeQuery();
			
			if ( rs.next() ){
				nf = new NotaFiscal();
				nf.setNotasFiscal_Numero( notasFiscal_Numero );
				
			}
		}catch(SQLException e){
			
			throw new RepositorioException ( e.getMessage());
			
		}finally{
			
			g.desconectar(c);
			
		}return nf;
	}
			   
    public Collection <NotaFiscal> listar(int notasFiscal_Numero) throws ConexaoException,RepositorioException {
        ArrayList <NotaFiscal> lista = new ArrayList <NotaFiscal>();
        NotaFiscal nf;
        Connection c = g.conectar();
        String sqlLista = "SELECT notasfiscal_Numero,clientes_Codigo,funcionarios_Codigo,formasPagamento_Codigo,notasFiscal_ValorNotaFiscal,notasFiscal_DataEmissao,notasFiscal_Status FROM Funcionarios";
        try{
        	
            Statement stm = c.createStatement();
            ResultSet rs = stm.executeQuery(sqlLista);
            
            while( rs.next() ){
            	
                nf = new NotaFiscal();
                nf.setNotasFiscal_Numero(rs.getInt( "notasFiscal_Numero" ) );
                nf.setClientes_Codigo(rs.getInt( "clientes_Codigo" ) );
                nf.setFuncionarios_Codigo(rs.getInt( "funcionarios_Codigo" ) );
                nf.setFormasPagamento_Codigo(rs.getInt("formasPagamento_codigo") );
                nf.setNotasFiscal_ValorNotaFiscal(rs.getDouble("notasFiscal_ValorNotaFiscal"));
                nf.setNotasFiscal_DataEmissao(rs.getDate("notasFiscal_DataEmissao"));
                nf.setNotasFiscal_Status(rs.getBoolean("NotasFiscal_Status"));
                lista.add( nf );
                
            } return lista;
        } catch( SQLException e ) {
        	
            throw new RepositorioException(e);
            
        } finally {
        	
            g.desconectar( c );
            
        }
    }
}
